﻿import gs.dataTransfer.XMLParser;
import clases.dades.apartats.ApComponents;
import clases.dades.Idioma;

/**
 * Carrega i parseja l'XML de components
 * 
 * @author JDo
 * @version 1.0
 */
class clases.dades.xml.XMLApComponents extends MovieClip{
	private var _componentsCatala  :ApComponents;
	private var _componentsCastella:ApComponents;
	private var _componentsAngles  :ApComponents;
	
	private var _onCarregat  :Function;
	private var _base        :MovieClip;
	
	/**
	 * Constructor
	 * 
	 * @param $xml        XML a carregar i parsejar
	 * @param $onCarregat Funció a cridar quan s'acaba tot el proces
	 * @param $base       MC origen de la crida a la classe
	 */
	public function XMLApComponents($xml:String,$onCarregat:Function,$base:MovieClip){
		_onCarregat = $onCarregat;
		_base       = $base;
		XMLParser.load($xml, xmlCarregat, this);
	}
	
	/**
	 * Carrega de l'XML completa
	 * 
	 * @param $ok        Ens diu si s'ha pogut carregar i parsejar l'XML
	 * @param $resultats Resultat del parseig
	 * @param $xml       XML que s'ha carregat
	 * @param $base      Origen de la crida del parsejador
	 */
	private function xmlCarregat($ok:Boolean, $resultats:Object, $xml:XML, $base:MovieClip):Void {
		$xml = null;
		if ($ok) {
			$base.parsejaResultats($resultats); 
		}
	}
	
	/**
	 * Parsseig de l'XML
	 * 
	 * @param $resultado Resultat del parser per tractar-lo 
	 */
	private function parsejaResultats($resultado:Object):Void{
		_componentsCatala   = new ApComponents($resultado.soprans[0].catala[0].value,
											   $resultado.contralts[0].catala[0].value,
											   $resultado.tenors[0].catala[0].value,
											   $resultado.baixos[0].catala[0].value);
		
		_componentsCastella = new ApComponents($resultado.soprans[0].castella[0].value,
											   $resultado.contralts[0].castella[0].value,
											   $resultado.tenors[0].castella[0].value,
											   $resultado.baixos[0].castella[0].value);
		
		_componentsAngles   = new ApComponents($resultado.soprans[0].angles[0].value,
											   $resultado.contralts[0].angles[0].value,
											   $resultado.tenors[0].angles[0].value,
											   $resultado.baixos[0].angles[0].value);
		
		var comp:Number;
		
		for(comp=0;comp<$resultado.soprans[0].cast[0].component.length;comp++){
			_componentsCatala.addSopra  ($resultado.soprans[0].cast[0].component[comp].value);
			_componentsCastella.addSopra($resultado.soprans[0].cast[0].component[comp].value);
			_componentsAngles.addSopra  ($resultado.soprans[0].cast[0].component[comp].value);
		}
		
		for(comp=0;comp<$resultado.contralts[0].cast[0].component.length;comp++){
			_componentsCatala.addContralt  ($resultado.contralts[0].cast[0].component[comp].value);
			_componentsCastella.addContralt($resultado.contralts[0].cast[0].component[comp].value);
			_componentsAngles.addContralt  ($resultado.contralts[0].cast[0].component[comp].value);
		}
		
		for(comp=0;comp<$resultado.tenors[0].cast[0].component.length;comp++){
			_componentsCatala.addTenor  ($resultado.tenors[0].cast[0].component[comp].value);
			_componentsCastella.addTenor($resultado.tenors[0].cast[0].component[comp].value);
			_componentsAngles.addTenor  ($resultado.tenors[0].cast[0].component[comp].value);
		}
		
		for(comp=0;comp<$resultado.baixos[0].cast[0].component.length;comp++){
			_componentsCatala.addBaix  ($resultado.baixos[0].cast[0].component[comp].value);
			_componentsCastella.addBaix($resultado.baixos[0].cast[0].component[comp].value);
			_componentsAngles.addBaix  ($resultado.baixos[0].cast[0].component[comp].value);
		}
		
		_onCarregat(_base);
	}
	
	/**
	 * Ens dona les dades del idioma corresponent
	 * 
	 * @param $id Identificador del idioma a retornar
	 * @return ApComponents
	 * @see clases.dades.apartats.ApComponents
	 */
	public function getIdioma($id:Number):ApComponents{
		switch($id){
			case Idioma.CATALA:
				return _componentsCatala;
			break;
			
			case Idioma.CASTELLA:
				return _componentsCastella;
			break;
			
			case Idioma.ANGLES:
				return _componentsAngles;
			break;
		}
	}
}